import os
import random

from nonebot import on_message
from nonebot.adapters import Event
from nonebot.matcher import Matcher
from nonebot.plugin import PluginMetadata
from nonebot_plugin_alconna import UniMsg
from nonebot_plugin_session import EventSession
from nonebot_plugin_uninfo import Uninfo

from zhenxun.configs.path_config import IMAGE_PATH
from zhenxun.configs.utils import PluginExtraData
from zhenxun.models.ban_console import BanConsole
from zhenxun.models.group_console import GroupConsole
from zhenxun.models.plugin_info import PluginInfo
from zhenxun.services.log import logger
from zhenxun.utils.enum import PluginType
from zhenxun.utils.message import MessageUtils

__plugin_meta__ = PluginMetadata(
    name="笨蛋检测",
    description="功能名称当命令检测",
    usage="""当一些笨蛋直接输入功能名称时，提示笨蛋使用帮助指令查看功能帮助""".strip(),
    extra=PluginExtraData(
        author="HibiKier",
        version="0.1",
        plugin_type=PluginType.DEPENDANT,
        menu_type="其他",
    ).to_dict(),
)


async def rule(event: Event, message: UniMsg, session: Uninfo) -> bool:
    group_id = session.group.id if session.group else None
    text = message.extract_plain_text().strip()
    if await BanConsole.is_ban(session.user.id, group_id):
        return False
    if group_id:
        if await BanConsole.is_ban(None, group_id):
            return False
        if g := await GroupConsole.get_group(group_id):
            if g.level < 0:
                return False
    return event.is_tome() and bool(text and len(text) < 20)


_matcher = on_message(rule=rule, priority=996, block=False)


_path = IMAGE_PATH / "_base" / "laugh"


@_matcher.handle()
async def _(matcher: Matcher, message: UniMsg, session: EventSession):
    text = message.extract_plain_text().strip()
    plugin = await PluginInfo.get_or_none(
        name=text,
        load_status=True,
        plugin_type=PluginType.NORMAL,
        block_type__isnull=True,
        status=True,
    )

    if not plugin:
        return

    image = None
    if _path.exists():
        if files := os.listdir(_path):
            image = _path / random.choice(files)
    message_list = []
    if image:
        message_list.append(image)
    message_list.append(
        "桀桀桀，预判到会有 '笨蛋' 把功能名称当命令用，特地前来嘲笑！"
        f"但还是好心来帮帮你啦！\n请at我发送 '帮助 {plugin.name}' 或者"
        f" '帮助 {plugin.id}' 来获取该功能帮助！"
    )
    logger.info("检测到功能名称当命令使用，已发送帮助信息", "功能帮助", session=session)
    await MessageUtils.build_message(message_list).send(reply_to=True)
    matcher.stop_propagation()
